import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
import unittest
from selenium.webdriver.support.select import Select


class MyTestCase(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        service = Service(executable_path="../driver/geckodriver.exe")
        cls.driver = webdriver.Firefox(service=service)

    def test_select(self):
        """测试 close  和 quit 的区别"""

        self.driver.get(
            "file:///D:/CourseWare/%E8%AF%BE%E4%BB%B6/Study%E8%AF%BE%E4%BB%B6/%E7%AC%AC%E4%B8%89%E9%98%B6%E6%AE%B5/testhtml/exam/index.html")
        self.driver.find_element(By.LINK_TEXT, "继续提供房源信息").click()

        time.sleep(2)

    def test_api(self):
        """测试 常用 的selenium 的方法"""

        self.driver.get(
            "file:///D:/CourseWare/%E8%AF%BE%E4%BB%B6/Study%E8%AF%BE%E4%BB%B6/%E7%AC%AC%E4%B8%89%E9%98%B6%E6%AE%B5/testhtml/exam/index.html")
        self.driver.find_element(By.LINK_TEXT, "继续提供房源信息").click()

        time.sleep(2)

        # 如果 想要 判断 脚本执行 是否成功  通过 断言
        # 预期值 ：房源注册  实际值 ：
        # title :获得网页的 标题名
        title = self.driver.title
        print(title)
        self.assertEqual('房源注册', title)

        # 获得 当前页面中 显示的 页面的 URL 链接
        url = self.driver.current_url
        print(url)

        # 获得网页中 的 源代码
        page_source = self.driver.page_source
        print(page_source)
        # 我们 可以使用 判断 源代码中 是否包含 对应的信息 如果包含 那么也是成功的
        result = page_source.__contains__('Edit by Hanamaki')
        print(result)
        self.assertTrue(result)  # 判断某个结果是否为 True  如果是 就是通过的 不然 就是失败的
        # self.assertFalse(result)  # 相反

        # 通过 CSS 的方式 去 元素定位 到  文本
        element = self.driver.find_element(By.CSS_SELECTOR, "p.edit")
        # 通过  text  方法  可以获得元素中的文本值
        print(element.text)

        # 获得 指定元素的标签名
        print(element.tag_name)

        # 获得 指定元素的 属性的 属性值
        print(element.get_attribute('class'))

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close() # 只会 关闭一个 标签页
        cls.driver.quit()  # 推出浏览器  全部关闭所有的标签页

        pass


if __name__ == '__main__':
    unittest.main()
